package metier;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import DB.Request;
import bean.Apprenti;
import bean.Classe;

public class ApprentiMetier {

	private static ApprentiMetier singleton = new ApprentiMetier();
	
	public static ApprentiMetier getInstance(){
		return singleton;
	}
	
	public Apprenti save(Apprenti apprenti){
		
		if(apprenti != null){
			String query;
			if (apprenti.getId_apprenti() != null) {
				//UPDATE
				query = "UPDATE apprenti SET nom=?,prenom=?,date_naissance=?,adresse_rue1=?,adresse_rue2=?,adresse_ville=?,adresse_cp=?,telephone_domicile=?,telephone_parents=?,telephone_portable=?,email=?,date_entree_formation=?,type_contrat=?,option_apprenti=?,id_utilisateur=?,id_entreprise=?,id_classe=? WHERE id_apprenti="+apprenti.getId_apprenti();
			} else {
				//INSERT
				query = "INSERT INTO apprenti(nom,prenom,date_naissance,adresse_rue1,adresse_rue2,adresse_ville,adresse_cp,telephone_domicile,telephone_parents,telephone_portable,email,date_entree_formation,type_contrat,option_apprenti,id_utilisateur,id_entreprise,id_classe) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			}
			List<Object> param = new ArrayList<Object>();
			param.add(apprenti.getNom());
			param.add(apprenti.getPrenom());
			param.add(apprenti.getDate_naissance());
			param.add(apprenti.getAdresse_rue1());
			param.add(apprenti.getAdresse_rue2());
			param.add(apprenti.getAdresse_ville());
			param.add(apprenti.getAdresse_cp());
			param.add(apprenti.getTelephone_domicile());
			param.add(apprenti.getTelephone_parents());
			param.add(apprenti.getTelephone_portable());
			param.add(apprenti.getEmail());
			param.add(apprenti.getDate_entree_formation());
			param.add(apprenti.getType_contrat());
			param.add(apprenti.getOption_apprenti());
			param.add(apprenti.getUtilisateur().getId_utilisateur());
			param.add(apprenti.getEntreprise().getId_entreprise());
			param.add(apprenti.getClasse().getId_classe());
			Request.getInstance().executeUpdate(query, param);
		}
		if (apprenti.getId_apprenti() != null) {
			return getById(apprenti.getId_apprenti());
		} else {
			return getById(getLastId());
		}
	}
	
	public void delete(Apprenti apprenti){
		String query = "DELETE FROM apprenti WHERE id_apprenti=" + apprenti.getId_apprenti();
		Request.getInstance().executeUpdate(query);
	}
	
	public Apprenti getById(Integer id){
		Apprenti apprenti = null;
		String query = "SELECT * FROM apprenti WHERE id_apprenti=" + id;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				apprenti = new Apprenti(id, resultat.getString("nom"), resultat.getString("prenom"), resultat.getDate("date_naissance"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone_domicile"), resultat.getString("telephone_parents"), resultat.getString("telephone_portable"), resultat.getString("email"), resultat.getDate("date_entree_formation"),resultat.getString("type_contrat"),resultat.getString("option_apprenti"),  UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")), EntrepriseMetier.getInstance().getById(resultat.getInt("id_entreprise")),ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return apprenti;
	}
	
	public List<Apprenti> getAll(){
		List<Apprenti> apprentis = new ArrayList<Apprenti>();
		String query = "SELECT * FROM apprenti WHERE id_apprenti";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				Apprenti apprenti = new Apprenti(resultat.getInt("id_apprenti"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getDate("date_naissance"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone_domicile"), resultat.getString("telephone_parents"), resultat.getString("telephone_portable"), resultat.getString("email"), resultat.getDate("date_entree_formation"),resultat.getString("type_contrat"),resultat.getString("option_apprenti"), UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")), EntrepriseMetier.getInstance().getById(resultat.getInt("id_entreprise")),ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
				apprentis.add(apprenti);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return apprentis;
	}
	public List<Apprenti> getByIdUtilisateur(int IdUtilisateur)
	{
		List<Apprenti> apprenti = new ArrayList<Apprenti>();
		String query = "SELECT * FROM apprenti WHERE id_utilisateur=" + IdUtilisateur + "";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try{
			while(resultat.next()){
				Apprenti apprentis = new Apprenti(resultat.getInt("id_apprenti"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getDate("date_naissance"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone_domicile"), resultat.getString("telephone_parents"), resultat.getString("telephone_portable"), resultat.getString("email"), resultat.getDate("date_entree_formation"),resultat.getString("type_contrat"),resultat.getString("option_apprenti"), UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")), EntrepriseMetier.getInstance().getById(resultat.getInt("id_entreprise")),ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
				apprenti.add(apprentis);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
		return apprenti;
		}
	private Integer getLastId(){
		Integer result = null;
		String query = "SELECT max(id_apprenti) AS id_apprenti FROM apprenti";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				result = resultat.getInt("id_apprenti");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
	
	
	public List<Apprenti> getByIdEntreprise(int IdEntreprise)
	{
		List<Apprenti> apprenti = new ArrayList<Apprenti>();
		String query = "SELECT * FROM apprenti WHERE id_entreprise=" + IdEntreprise + "";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try{
			while(resultat.next()){
				Apprenti apprentis = new Apprenti(resultat.getInt("id_apprenti"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getDate("date_naissance"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone_domicile"), resultat.getString("telephone_parents"), resultat.getString("telephone_portable"), resultat.getString("email"), resultat.getDate("date_entree_formation"),resultat.getString("type_contrat"),resultat.getString("option_apprenti"),  UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")), EntrepriseMetier.getInstance().getById(resultat.getInt("id_entreprise")),ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
				apprenti.add(apprentis);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
		return apprenti;
	}
	
	public List<Apprenti> getByIdClasse(Integer idClasse)
	{
		List<Apprenti> apprenti = new ArrayList<Apprenti>();
		String query = "SELECT * FROM apprenti WHERE id_classe=" + idClasse + " ORDER BY nom, prenom";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try{
			while(resultat.next()){
				Apprenti apprentis = new Apprenti(resultat.getInt("id_apprenti"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getDate("date_naissance"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone_domicile"), resultat.getString("telephone_parents"), resultat.getString("telephone_portable"), resultat.getString("email"), resultat.getDate("date_entree_formation"),resultat.getString("type_contrat"),resultat.getString("option_apprenti"), UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")), EntrepriseMetier.getInstance().getById(resultat.getInt("id_entreprise")),ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
				apprenti.add(apprentis);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
		return apprenti;
	}
}
